package com.ruoyi.category.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.model.category.Category;
import com.ruoyi.model.category.contest.CategoryVo;

import java.util.List;
import java.util.Map;

public interface ICategoryService extends IService<Category> {

    /**
     * 递归查询分类表格
     *
     * @param categoryName 分类名称
     * @return 封装好的树形结构
     */

    List<Category> queryTreeCategoryList(String categoryName);

    /**
     * 删除项目分类
     * 当删的分类有子分类时 不允许删除
     *
     * @param id 分类id
     * @return 影响行数
     */
    int removeCategoryById(String id);

    int removeCategoryNQuit(List<String> ids);

    int removeCategoryByInQuit(String id);

    int removeCategoryQuit(List<String> ids);

    /**
     * 修改项目分类
     *
     * @param category 分类对象
     * @return 影响行数
     */
    int updateCategoryById(Category category);

    /**
     * 新增分类
     *
     * @param category 分类对象
     * @return 影响行数
     */
    int saveCategory(Category category);

    /**
     * 根据分类名称查询所有的子分类
     *
     * @param categoryName 分类名称
     * @return List<Category>
     */
    List<Category> findCategoryChildListByName(String categoryName);


    /**
     * 查询所有分类 并且组装返回
     *
     * @return Map<String, Object>
     */
    Map<String, Object> queryIndexCategory();


    /**
     * 查询所有分类, 展开的
     *
     * @return 分类列表
     */
    List<CategoryVo> queryExpandContestCategoryList(String categoryName);

    /**
     * 查询所有的竞赛分类
     *
     * @param categoryName 分类名
     * @return List<Category>
     */
    List<Category> queryTreeContestCategoryList(String categoryName);


    /**
     * 查询所有的活动分类
     *
     * @param categoryName 分类名
     * @return List<Category>
     */
    List<Category> queryTreeActivityCategoryList(String categoryName);


    /**
     * 查询所有的文章分类
     *
     * @param categoryName 分类名
     * @return List<Category>
     */
    List<Category> queryTreeBlogCategoryList(String categoryName);
}
